#include <cstdio>
#include <cmath>

int a[ 20 ], data[ 200010 ], n;
int dp[ 200011 ][ 20 ], result[ 200010 ];

int max( int a, int b ) { return ( a > b ) ?a :b; }

void init(void)
{
    int i,j;
    for(i=1;i<=n;i++)
    {
        dp[i][0]=data[i];
    }

    int temp=result[n];
    for(j=1;j<=temp;j++)
    {
        for(i=1;i+a[j]-1<=n;i++)
        {
            dp[i][j]=max(dp[i][j-1],dp[i+a[j-1]][j-1]);
        }
    }
}

void first(void)
{
    int i;
    for(i=0;i<20;i++)
    {
        a[i]=1<<i;
    }
    for(i=1;i<200010;i++)
    {
        result[i]=(int)(log((double)i)/log(2.0));
    }
}

int getmax(int p,int q)
{
    int temp=result[q-p+1];
    int k=temp;
    return max(dp[p][k],dp[q-a[k]+1][k]);
}

int main( )
{
    int i, j, m, t, p, tot;
    first( );
    while ( scanf("%d%d", &n, &m) )
    {
        if ( n < 0 && m < 0 )
            break;
        for ( i = 1; i <= n; i++ )
            scanf("%d", &data[ i ]);
        init( );
        t = 0;
        for ( i = 1; i <= n; i++ )
        {
            if ( n / i == t )
                continue;
            t = n / i;
            tot = 0;
            for ( j = 1; j + t - 1 <= n; j += t )
            {
                tot += getmax( j, j + t - 1 );
                if ( tot > m )
                {
                    j += t - 1;
                    break;
                }
            }
            if ( tot > m )
                break;
            tot = 0;
        }
        if ( i <= n )
            if ( j / ( n / i ) < i )
                printf("%d\n", i);
            else
                printf("%d\n", j / ( n / i ));
        else
            puts("-1");
    }
    return 0;
}
